@agent-native/core 0.48.3 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/agent/context-xray/actions/context-evict.d.ts +1 -1
  2. package/dist/agent/context-xray/actions/context-pin.d.ts +1 -1
  3. package/dist/agent/context-xray/actions/context-report.d.ts +4 -4
  4. package/dist/agent/context-xray/actions/context-restore.d.ts +1 -1
  5. package/dist/application-state/handlers.d.ts +2 -2
  6. package/dist/application-state/handlers.d.ts.map +1 -1
  7. package/dist/cli/app-skill.d.ts +157 -0
  8. package/dist/cli/app-skill.d.ts.map +1 -0
  9. package/dist/cli/app-skill.js +17 -7
  10. package/dist/cli/app-skill.js.map +1 -1
  11. package/dist/cli/audit-agent-web.d.ts +2 -0
  12. package/dist/cli/audit-agent-web.d.ts.map +1 -0
  13. package/dist/cli/code-agent-connector.d.ts +17 -0
  14. package/dist/cli/code-agent-connector.d.ts.map +1 -0
  15. package/dist/cli/code.d.ts +66 -0
  16. package/dist/cli/code.d.ts.map +1 -0
  17. package/dist/cli/connect.d.ts +168 -0
  18. package/dist/cli/connect.d.ts.map +1 -0
  19. package/dist/cli/connect.js +118 -30
  20. package/dist/cli/connect.js.map +1 -1
  21. package/dist/cli/context-xray-local.d.ts +16 -0
  22. package/dist/cli/context-xray-local.d.ts.map +1 -0
  23. package/dist/cli/create-workspace.d.ts +8 -0
  24. package/dist/cli/create-workspace.d.ts.map +1 -0
  25. package/dist/cli/index.d.ts +3 -0
  26. package/dist/cli/index.d.ts.map +1 -0
  27. package/dist/cli/info.d.ts +2 -0
  28. package/dist/cli/info.d.ts.map +1 -0
  29. package/dist/cli/mcp-config-writers.d.ts +108 -0
  30. package/dist/cli/mcp-config-writers.d.ts.map +1 -0
  31. package/dist/cli/mcp-config-writers.js +143 -0
  32. package/dist/cli/mcp-config-writers.js.map +1 -1
  33. package/dist/cli/mcp.d.ts +16 -0
  34. package/dist/cli/mcp.d.ts.map +1 -0
  35. package/dist/cli/mcp.js +10 -10
  36. package/dist/cli/mcp.js.map +1 -1
  37. package/dist/cli/migrate.d.ts +38 -0
  38. package/dist/cli/migrate.d.ts.map +1 -0
  39. package/dist/cli/plan-local.d.ts +43 -0
  40. package/dist/cli/plan-local.d.ts.map +1 -0
  41. package/dist/cli/plan-publish-store.d.ts +62 -0
  42. package/dist/cli/plan-publish-store.d.ts.map +1 -0
  43. package/dist/cli/pr-visual-recap-workflow.d.ts +11 -0
  44. package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -0
  45. package/dist/cli/pr-visual-recap-workflow.js +1 -1
  46. package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
  47. package/dist/cli/recap.d.ts +453 -0
  48. package/dist/cli/recap.d.ts.map +1 -0
  49. package/dist/cli/recap.js +228 -95
  50. package/dist/cli/recap.js.map +1 -1
  51. package/dist/cli/skills.d.ts +193 -0
  52. package/dist/cli/skills.d.ts.map +1 -0
  53. package/dist/cli/skills.js +518 -177
  54. package/dist/cli/skills.js.map +1 -1
  55. package/dist/cli/telemetry.d.ts +13 -0
  56. package/dist/cli/telemetry.d.ts.map +1 -0
  57. package/dist/cli/telemetry.js +115 -0
  58. package/dist/cli/telemetry.js.map +1 -0
  59. package/dist/cli/workspace-dev.d.ts +96 -0
  60. package/dist/cli/workspace-dev.d.ts.map +1 -0
  61. package/dist/client/AssistantChat.d.ts.map +1 -1
  62. package/dist/client/AssistantChat.js +10 -19
  63. package/dist/client/AssistantChat.js.map +1 -1
  64. package/dist/client/ErrorBoundary.d.ts.map +1 -1
  65. package/dist/client/ErrorBoundary.js +34 -1
  66. package/dist/client/ErrorBoundary.js.map +1 -1
  67. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
  68. package/dist/client/blocks/library/AnnotatedCodeBlock.js +15 -7
  69. package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
  70. package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
  71. package/dist/client/blocks/library/DiffBlock.js +17 -10
  72. package/dist/client/blocks/library/DiffBlock.js.map +1 -1
  73. package/dist/client/blocks/library/annotation-rail.d.ts +5 -0
  74. package/dist/client/blocks/library/annotation-rail.d.ts.map +1 -1
  75. package/dist/client/blocks/library/annotation-rail.js +6 -0
  76. package/dist/client/blocks/library/annotation-rail.js.map +1 -1
  77. package/dist/client/blocks/types.d.ts +5 -0
  78. package/dist/client/blocks/types.d.ts.map +1 -1
  79. package/dist/client/blocks/types.js.map +1 -1
  80. package/dist/client/index.d.ts +1 -1
  81. package/dist/client/index.d.ts.map +1 -1
  82. package/dist/client/index.js +1 -1
  83. package/dist/client/index.js.map +1 -1
  84. package/dist/client/route-chunk-recovery.d.ts +17 -0
  85. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  86. package/dist/client/route-chunk-recovery.js +67 -0
  87. package/dist/client/route-chunk-recovery.js.map +1 -1
  88. package/dist/deploy/build.d.ts.map +1 -1
  89. package/dist/deploy/build.js +15 -71
  90. package/dist/deploy/build.js.map +1 -1
  91. package/dist/extensions/schema.d.ts +54 -54
  92. package/dist/extensions/slots/schema.d.ts +13 -13
  93. package/dist/file-upload/actions/upload-image.d.ts +4 -4
  94. package/dist/mcp/actions/create-org-service-token.d.ts +1 -1
  95. package/dist/mcp/actions/list-org-service-tokens.d.ts +7 -7
  96. package/dist/mcp/build-server.d.ts +12 -12
  97. package/dist/mcp/build-server.d.ts.map +1 -1
  98. package/dist/mcp/build-server.js.map +1 -1
  99. package/dist/mcp/connect-route.js +1 -1
  100. package/dist/mcp/connect-route.js.map +1 -1
  101. package/dist/mcp/oauth-route.d.ts +10 -0
  102. package/dist/mcp/oauth-route.d.ts.map +1 -1
  103. package/dist/mcp/oauth-route.js +34 -3
  104. package/dist/mcp/oauth-route.js.map +1 -1
  105. package/dist/mcp/oauth-store.d.ts +15 -1
  106. package/dist/mcp/oauth-store.d.ts.map +1 -1
  107. package/dist/mcp/oauth-store.js +60 -4
  108. package/dist/mcp/oauth-store.js.map +1 -1
  109. package/dist/mcp/oauth-token.d.ts +3 -1
  110. package/dist/mcp/oauth-token.d.ts.map +1 -1
  111. package/dist/mcp/oauth-token.js +78 -6
  112. package/dist/mcp/oauth-token.js.map +1 -1
  113. package/dist/mcp/server.d.ts.map +1 -1
  114. package/dist/mcp/server.js +8 -6
  115. package/dist/mcp/server.js.map +1 -1
  116. package/dist/observability/routes.d.ts +11 -11
  117. package/dist/org/handlers.d.ts +7 -11
  118. package/dist/org/handlers.d.ts.map +1 -1
  119. package/dist/secrets/schema.d.ts +7 -7
  120. package/dist/server/auth.d.ts.map +1 -1
  121. package/dist/server/auth.js +8 -5
  122. package/dist/server/auth.js.map +1 -1
  123. package/dist/server/csrf.d.ts +1 -1
  124. package/dist/server/csrf.d.ts.map +1 -1
  125. package/dist/server/onboarding-html.d.ts.map +1 -1
  126. package/dist/server/onboarding-html.js +12 -11
  127. package/dist/server/onboarding-html.js.map +1 -1
  128. package/dist/server/poll-events.d.ts +1 -1
  129. package/dist/server/security-headers.d.ts +1 -1
  130. package/dist/server/security-headers.d.ts.map +1 -1
  131. package/dist/server/ssr-handler.d.ts.map +1 -1
  132. package/dist/server/ssr-handler.js +42 -130
  133. package/dist/server/ssr-handler.js.map +1 -1
  134. package/dist/sharing/actions/list-resource-shares.d.ts +3 -3
  135. package/dist/sharing/actions/set-resource-visibility.d.ts +2 -2
  136. package/dist/sharing/actions/share-resource.d.ts +4 -4
  137. package/dist/sharing/actions/unshare-resource.d.ts +1 -1
  138. package/dist/sharing/schema.d.ts +12 -12
  139. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +2 -2
  140. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +6 -6
  141. package/dist/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +2 -2
  142. package/dist/workspace-files/schema.d.ts +8 -8
  143. package/docs/content/external-agents.md +14 -0
  144. package/docs/content/plan-plugin.md +16 -7
  145. package/package.json +5 -1
  146. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +2 -2
  147. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +6 -6
  148. package/src/templates/workspace-core/.agents/skills/external-agents/references/mcp-apps-embedding.md +2 -2
@@ -3,7 +3,7 @@ declare const _default: import("../../../action.js").ActionDefinition<{
3
3
  segmentId: string;
4
4
  }, {
5
5
  directive: import("../../../shared/context-xray.js").ContextDirective;
6
- manifest: import("../../../shared/context-xray.js").ContextManifest | null;
6
+ manifest: import("../../../shared/context-xray.js").ContextManifest;
7
7
  }>;
8
8
  export default _default;
9
9
  //# sourceMappingURL=context-evict.d.ts.map
@@ -3,7 +3,7 @@ declare const _default: import("../../../action.js").ActionDefinition<{
3
3
  segmentId: string;
4
4
  }, {
5
5
  directive: import("../../../shared/context-xray.js").ContextDirective;
6
- manifest: import("../../../shared/context-xray.js").ContextManifest | null;
6
+ manifest: import("../../../shared/context-xray.js").ContextManifest;
7
7
  }>;
8
8
  export default _default;
9
9
  //# sourceMappingURL=context-pin.d.ts.map
@@ -1,14 +1,14 @@
1
1
  import { type ContextManifest } from "../../../shared/context-xray.js";
2
2
  declare const _default: import("../../../action.js").ActionDefinition<{
3
3
  threadId: string;
4
- model?: string | undefined;
4
+ model?: string;
5
5
  segments?: {
6
6
  segmentId: string;
7
7
  label: string;
8
8
  tokenCount: number;
9
- group?: string | undefined;
10
- status?: "active" | "pinned" | "evicted" | "summarized" | undefined;
11
- }[] | undefined;
9
+ group?: string;
10
+ status?: "active" | "pinned" | "evicted" | "summarized";
11
+ }[];
12
12
  }, ContextManifest>;
13
13
  export default _default;
14
14
  //# sourceMappingURL=context-report.d.ts.map
@@ -3,7 +3,7 @@ declare const _default: import("../../../action.js").ActionDefinition<{
3
3
  segmentId: string;
4
4
  }, {
5
5
  restored: number;
6
- manifest: import("../../../shared/context-xray.js").ContextManifest | null;
6
+ manifest: import("../../../shared/context-xray.js").ContextManifest;
7
7
  }>;
8
8
  export default _default;
9
9
  //# sourceMappingURL=context-restore.d.ts.map
@@ -1,4 +1,4 @@
1
- export declare const getState: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<Record<string, unknown> | null>>;
1
+ export declare const getState: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<Record<string, unknown>>>;
2
2
  export declare const putState: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<any>>;
3
3
  export declare const deleteState: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
4
4
  ok: boolean;
@@ -6,7 +6,7 @@ export declare const deleteState: import("h3").EventHandlerWithFetch<import("h3"
6
6
  /** List all compose drafts */
7
7
  export declare const listComposeDrafts: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<Record<string, unknown>[]>>;
8
8
  /** Get a single compose draft */
9
- export declare const getComposeDraft: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<Record<string, unknown> | null>>;
9
+ export declare const getComposeDraft: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<Record<string, unknown>>>;
10
10
  /** Create or update a compose draft */
11
11
  export declare const putComposeDraft: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<any>>;
12
12
  /** Delete a single compose draft */
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/application-state/handlers.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,QAAQ,+GAKnB,CAAC;AAEH,eAAO,MAAM,QAAQ,oFAOnB,CAAC;AAEH,eAAO,MAAM,WAAW;;GAMtB,CAAC;AAQH,8BAA8B;AAC9B,eAAO,MAAM,iBAAiB,0GAI5B,CAAC;AAEH,iCAAiC;AACjC,eAAO,MAAM,eAAe,+GAK1B,CAAC;AAEH,uCAAuC;AACvC,eAAO,MAAM,eAAe,oFAe1B,CAAC;AAEH,oCAAoC;AACpC,eAAO,MAAM,kBAAkB;;GAM7B,CAAC;AAEH,gCAAgC;AAChC,eAAO,MAAM,sBAAsB;;GAOlC,CAAC"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/application-state/handlers.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,QAAQ,wGAKnB,CAAC;AAEH,eAAO,MAAM,QAAQ,oFAOnB,CAAC;AAEH,eAAO,MAAM,WAAW;;GAMtB,CAAC;AAQH,8BAA8B;AAC9B,eAAO,MAAM,iBAAiB,0GAI5B,CAAC;AAEH,iCAAiC;AACjC,eAAO,MAAM,eAAe,wGAK1B,CAAC;AAEH,uCAAuC;AACvC,eAAO,MAAM,eAAe,oFAe1B,CAAC;AAEH,oCAAoC;AACpC,eAAO,MAAM,kBAAkB;;GAM7B,CAAC;AAEH,gCAAgC;AAChC,eAAO,MAAM,sBAAsB;;GAOlC,CAAC"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * `agent-native app-skill` packages an agent-native app as a distributable
3
+ * skill bundle: instructions + MCP connector + embeddable app surfaces.
4
+ *
5
+ * The manifest intentionally contains no user secrets. Hosted installs write
6
+ * URL-only MCP entries; clients that need auth complete OAuth/device setup in
7
+ * the host. Local installs point at a developer-owned app process.
8
+ */
9
+ import { type ClientId } from "./mcp-config-writers.js";
10
+ export type SkillVisibility = "internal" | "exported" | "both";
11
+ export type AppSkillHostAdapter = "codex-plugin" | "claude-marketplace" | "vercel-skills" | "plain-skill" | "claude-skill" | "chatgpt-mcp" | "generic-mcp";
12
+ export interface AppSkillManifestSkill {
13
+ path: string;
14
+ visibility: SkillVisibility;
15
+ exportAs?: string;
16
+ }
17
+ export interface AppSkillSurface {
18
+ id: string;
19
+ action?: string;
20
+ path: string;
21
+ mediaTypes?: string[];
22
+ defaultMediaType?: string;
23
+ }
24
+ export interface AppSkillManifest {
25
+ schemaVersion: 1;
26
+ id: string;
27
+ displayName: string;
28
+ description: string;
29
+ /**
30
+ * Optional semver base for generated plugin manifests. Codex keys its plugin
31
+ * cache on the version string, so the packer appends a content hash to this
32
+ * base; leave it unset to default to "1.0.0".
33
+ */
34
+ version?: string;
35
+ hosted: {
36
+ url: string;
37
+ mcpUrl: string;
38
+ };
39
+ mcp: {
40
+ serverName: string;
41
+ aliases?: string[];
42
+ };
43
+ local?: {
44
+ template?: string;
45
+ sourcePath?: string;
46
+ defaultUrl?: string;
47
+ commands?: {
48
+ install?: string;
49
+ dev?: string;
50
+ start?: string;
51
+ };
52
+ };
53
+ auth?: {
54
+ mode?: "oauth" | "device" | "none";
55
+ setup?: string;
56
+ };
57
+ surfaces: AppSkillSurface[];
58
+ skills: AppSkillManifestSkill[];
59
+ hostAdapters: AppSkillHostAdapter[];
60
+ }
61
+ export interface LoadedAppSkillManifest {
62
+ manifest: AppSkillManifest;
63
+ file: string;
64
+ dir: string;
65
+ }
66
+ export interface ParsedAppSkillArgs {
67
+ command: "ensure" | "launch" | "pack" | "help";
68
+ manifest?: string;
69
+ client: string;
70
+ scope: string;
71
+ serverName?: string;
72
+ out?: string;
73
+ into?: string;
74
+ mode: "hosted" | "local";
75
+ dryRun: boolean;
76
+ skipInstall: boolean;
77
+ noRegister: boolean;
78
+ printJson: boolean;
79
+ yes: boolean;
80
+ }
81
+ export interface EnsureAppSkillOptions {
82
+ mode?: "hosted" | "local";
83
+ clients?: ClientId[];
84
+ scope?: string;
85
+ serverName?: string;
86
+ baseDir?: string;
87
+ dryRun?: boolean;
88
+ confirm?: boolean;
89
+ yes?: boolean;
90
+ log?: (message: string) => void;
91
+ }
92
+ export interface EnsureAppSkillResult {
93
+ mode: "hosted" | "local";
94
+ serverName: string;
95
+ mcpUrl: string;
96
+ clients: ClientId[];
97
+ written: {
98
+ client: ClientId;
99
+ file: string;
100
+ }[];
101
+ }
102
+ export interface LaunchAppSkillOptions {
103
+ mode?: "hosted" | "local";
104
+ into?: string;
105
+ dryRun?: boolean;
106
+ skipInstall?: boolean;
107
+ noRegister?: boolean;
108
+ clients?: ClientId[];
109
+ scope?: string;
110
+ serverName?: string;
111
+ baseDir?: string;
112
+ confirm?: boolean;
113
+ yes?: boolean;
114
+ log?: (message: string) => void;
115
+ }
116
+ export interface AppSkillLaunchPlan {
117
+ mode: "hosted" | "local";
118
+ appId: string;
119
+ appDir?: string;
120
+ sourceDir?: string;
121
+ url: string;
122
+ mcpUrl: string;
123
+ serverName: string;
124
+ commands: {
125
+ install?: string;
126
+ dev?: string;
127
+ start?: string;
128
+ };
129
+ }
130
+ export declare function normalizeAppSkillManifest(raw: unknown): AppSkillManifest;
131
+ export declare function findAppSkillManifest(startDir?: string): string;
132
+ export declare function loadAppSkillManifest(file?: string): LoadedAppSkillManifest;
133
+ export declare function exportedSkills(manifest: AppSkillManifest): AppSkillManifestSkill[];
134
+ export declare function internalSkills(manifest: AppSkillManifest): AppSkillManifestSkill[];
135
+ export declare function parseAppSkillArgs(argv: string[]): ParsedAppSkillArgs;
136
+ export declare function exportedSkillContentHash(manifestDir: string, skills: AppSkillManifestSkill[], manifest: AppSkillManifest): string;
137
+ /**
138
+ * Plugin version embeds a content hash of the exported skills + MCP server
139
+ * identity/endpoint.
140
+ * Codex keys its plugin cache on the version string, so a changed skill or MCP
141
+ * URL yields a new version and `codex plugin marketplace upgrade` (which runs
142
+ * on startup) delivers the update automatically — no manual semver bump per
143
+ * edit. Claude Code uses commit-SHA versioning instead (plugin.json omits
144
+ * version), so it auto-updates on every push.
145
+ */
146
+ export declare function resolvePluginVersion(manifest: AppSkillManifest, manifestDir: string, skills: AppSkillManifestSkill[]): string;
147
+ export interface AppSkillPackResult {
148
+ outDir: string;
149
+ exportedSkillNames: string[];
150
+ files: string[];
151
+ }
152
+ export declare function buildAppSkillPack(loaded: LoadedAppSkillManifest, outDir: string): AppSkillPackResult;
153
+ export declare function resolveLaunchPlan(loaded: LoadedAppSkillManifest, options?: LaunchAppSkillOptions): AppSkillLaunchPlan;
154
+ export declare function ensureAppSkill(loaded: LoadedAppSkillManifest, options?: EnsureAppSkillOptions): Promise<EnsureAppSkillResult>;
155
+ export declare function launchAppSkill(loaded: LoadedAppSkillManifest, options?: LaunchAppSkillOptions): Promise<AppSkillLaunchPlan>;
156
+ export declare function runAppSkill(argv: string[]): Promise<void>;
157
+ //# sourceMappingURL=app-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-skill.d.ts","sourceRoot":"","sources":["../../src/cli/app-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EACL,KAAK,QAAQ,EAGd,MAAM,yBAAyB,CAAC;AAGjC,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAC/D,MAAM,MAAM,mBAAmB,GAC3B,cAAc,GACd,oBAAoB,GACpB,eAAe,GACf,aAAa,GACb,cAAc,GACd,aAAa,GACb,aAAa,CAAC;AAElB,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,eAAe,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,GAAG,EAAE;QACH,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE;YACT,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,KAAK,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;QACnC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,YAAY,EAAE,mBAAmB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE;QAAE,MAAM,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AA6GD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAsHxE;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAY7E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAQ1E;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,gBAAgB,GACzB,qBAAqB,EAAE,CAIzB;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,gBAAgB,GACzB,qBAAqB,EAAE,CAIzB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAqEpE;AAmKD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,qBAAqB,EAAE,EAC/B,QAAQ,EAAE,gBAAgB,GACzB,MAAM,CAuBR;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,qBAAqB,EAAE,GAC9B,MAAM,CAGR;AAmMD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,MAAM,GACb,kBAAkB,CAqHpB;AAuCD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,sBAAsB,EAC9B,OAAO,GAAE,qBAA0B,GAClC,kBAAkB,CA+BpB;AA+ED,wBAAsB,cAAc,CAClC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAuD/B;AAmCD,wBAAsB,cAAc,CAClC,MAAM,EAAE,sBAAsB,EAC9B,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAwD7B;AAMD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE/D"}
@@ -11,7 +11,7 @@ import os from "node:os";
11
11
  import path from "node:path";
12
12
  import { spawn } from "node:child_process";
13
13
  import { createHash } from "node:crypto";
14
- import { buildHttpMcpEntry } from "./mcp-config-writers.js";
14
+ import { buildHttpMcpEntry, removeSameUrlDuplicatesForClient, } from "./mcp-config-writers.js";
15
15
  import { resolveClients, writeConfigs } from "./connect.js";
16
16
  const HELP = `agent-native app-skill
17
17
 
@@ -877,13 +877,23 @@ export async function ensureAppSkill(loaded, options = {}) {
877
877
  if (options.confirm && !options.yes) {
878
878
  await confirmMcpRegistration(result, loaded.manifest.displayName, scope);
879
879
  }
880
- result.written = writeConfigs(clients, serverName, plan.mcpUrl, undefined, scope, options.baseDir ?? process.cwd());
881
- if (!options.serverName) {
882
- for (const alias of manifest.mcp.aliases ?? []) {
883
- result.written.push(...writeConfigs(clients, alias, plan.mcpUrl, undefined, scope, options.baseDir ?? process.cwd()));
884
- }
880
+ const baseDir = options.baseDir ?? process.cwd();
881
+ result.written = writeConfigs(clients, serverName, plan.mcpUrl, undefined, scope, baseDir);
882
+ // Aliases are intentionally NOT written as separate entries. Instead,
883
+ // repurpose the alias list as a cleanup list: remove any other entries in
884
+ // the same config files that point at the same URL (covers legacy alias
885
+ // names, old default names like 'agent-native-<slug>', and any stale
886
+ // custom names left from previous installs).
887
+ const allRemovedNames = [];
888
+ for (const client of clients) {
889
+ const removed = removeSameUrlDuplicatesForClient(client, serverName, plan.mcpUrl, baseDir, scope);
890
+ allRemovedNames.push(...removed);
885
891
  }
886
- options.log?.(`Registered ${mcpServerNames(manifest, options.serverName).join(", ")} for ${clients.join(", ")} at ${plan.mcpUrl}`);
892
+ const uniqueRemoved = [...new Set(allRemovedNames)];
893
+ const logMsg = uniqueRemoved.length > 0
894
+ ? `Registered "${serverName}" for ${clients.join(", ")} at ${plan.mcpUrl}; removed duplicate entries: ${uniqueRemoved.join(", ")}`
895
+ : `Registered "${serverName}" for ${clients.join(", ")} at ${plan.mcpUrl}`;
896
+ options.log?.(logMsg);
887
897
  return result;
888
898
  }
889
899
  async function confirmMcpRegistration(result, displayName, scope) {